/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ModuloDiagnosticador;

import ModuloBaseDelConocimiento.Caso;

/**
 *
 * @author rayner
 */
public class NeuronaKohonen {
    private int id;
    private double pesos[];
    private LVQ lvq;
    private double aprendizajeLVQ = 0.1;
    public NeuronaKohonen(int ide, double []weight, int numeroDeEntradasLVQ){
        pesos = weight;
        id = ide;
        lvq = new LVQ(aprendizajeLVQ, numeroDeEntradasLVQ);
    }
    public double calcularDistEuclidiana(double[] input){
        double dist = 0.0;
        for(int i = 0; i < input.length ; i ++){
            dist += (input[i] - pesos[i]) * (input[i] - pesos[i]);
        }
        return Math.sqrt(dist);
    }
    public void updatePesos(int numNeuronas, double[] input, int targetLVQ, String desp, boolean divi){
        for(int i = 0; i < pesos.length ; i++){
            pesos[i] = (pesos[i] * numNeuronas + input[i])/ (numNeuronas + 1);
        }
        if(divi) lvq.actualizarApren();
        lvq.entrenarRedLVQ1(input, targetLVQ, desp);
    }
    public Caso recuperarLVQ(double []input){
        return lvq.recuperarMejorCaso(input);
    }
}
